MAYBE 1.974 H-Termination proof of /home/matraf/haskell/eval_FullyBlown_Fast/empty.hs
H-Termination of the given Haskell-Program with start terms could not be shown:



HASKELL
  ↳ BR

mainModule Main
  ((enumFrom :: Int  ->  [Int]) :: Int  ->  [Int])

module Main where
  import qualified Prelude



Replaced joker patterns by fresh variables and removed binding patterns.

↳ HASKELL
  ↳ BR
HASKELL
      ↳ COR

mainModule Main
  ((enumFrom :: Int  ->  [Int]) :: Int  ->  [Int])

module Main where
  import qualified Prelude



Cond Reductions:
The following Function with conditions
undefined 
 | False
 = undefined

is transformed to
undefined  = undefined1

undefined0 True = undefined

undefined1  = undefined0 False



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
HASKELL
          ↳ NumRed

mainModule Main
  ((enumFrom :: Int  ->  [Int]) :: Int  ->  [Int])

module Main where
  import qualified Prelude



Num Reduction: All numbers are transformed to thier corresponding representation with Pos, Neg, Succ and Zero.

↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ NumRed
HASKELL
              ↳ Narrow
              ↳ Narrow

mainModule Main
  (enumFrom :: Int  ->  [Int])

module Main where
  import qualified Prelude



Haskell To QDPs


↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ NumRed
            ↳ HASKELL
              ↳ Narrow
QDP
                  ↳ RuleRemovalProof
              ↳ Narrow

Q DP problem:
The TRS P consists of the following rules:

new_numericEnumFrom(vx3) → new_numericEnumFrom(new_ps(vx3))

The TRS R consists of the following rules:

new_primPlusNat(Zero) → Succ(Zero)
new_ps(Neg(Succ(Zero))) → Pos(Zero)
new_ps(Neg(Zero)) → Pos(Succ(Zero))
new_ps(Neg(Succ(Succ(vx3000)))) → Neg(Succ(vx3000))
new_primPlusNat0(Succ(vx3000)) → Succ(vx3000)
new_primPlusNat(Succ(vx300)) → Succ(Succ(new_primPlusNat0(vx300)))
new_ps(Pos(vx30)) → Pos(new_primPlusNat(vx30))
new_primPlusNat0(Zero) → Zero

The set Q consists of the following terms:

new_ps(Neg(Succ(Zero)))
new_primPlusNat(Succ(x0))
new_primPlusNat(Zero)
new_ps(Neg(Succ(Succ(x0))))
new_primPlusNat0(Zero)
new_ps(Pos(x0))
new_ps(Neg(Zero))
new_primPlusNat0(Succ(x0))

We have to consider all minimal (P,Q,R)-chains.
By using the rule removal processor [15] with the following polynomial ordering [25], at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented.

Strictly oriented rules of the TRS R:

new_ps(Neg(Succ(Zero))) → Pos(Zero)
new_ps(Neg(Zero)) → Pos(Succ(Zero))

Used ordering: POLO with Polynomial interpretation [25]:

POL(Neg(x1)) = 1 + x1   
POL(Pos(x1)) = 2·x1   
POL(Succ(x1)) = x1   
POL(Zero) = 0   
POL(new_numericEnumFrom(x1)) = 2·x1   
POL(new_primPlusNat(x1)) = x1   
POL(new_primPlusNat0(x1)) = x1   
POL(new_ps(x1)) = x1   



↳ HASKELL
  ↳ BR
    ↳ HASKELL
      ↳ COR
        ↳ HASKELL
          ↳ NumRed
            ↳ HASKELL
              ↳ Narrow
                ↳ QDP
                  ↳ RuleRemovalProof
QDP
                      ↳ NonTerminationProof
              ↳ Narrow

Q DP problem:
The TRS P consists of the following rules:

new_numericEnumFrom(vx3) → new_numericEnumFrom(new_ps(vx3))

The TRS R consists of the following rules:

new_primPlusNat(Zero) → Succ(Zero)
new_ps(Neg(Succ(Succ(vx3000)))) → Neg(Succ(vx3000))
new_primPlusNat0(Succ(vx3000)) → Succ(vx3000)
new_primPlusNat(Succ(vx300)) → Succ(Succ(new_primPlusNat0(vx300)))
new_ps(Pos(vx30)) → Pos(new_primPlusNat(vx30))
new_primPlusNat0(Zero) → Zero

The set Q consists of the following terms:

new_ps(Neg(Succ(Zero)))
new_primPlusNat(Succ(x0))
new_primPlusNat(Zero)
new_ps(Neg(Succ(Succ(x0))))
new_primPlusNat0(Zero)
new_ps(Pos(x0))
new_ps(Neg(Zero))
new_primPlusNat0(Succ(x0))

We have to consider all minimal (P,Q,R)-chains.
We used the non-termination processor [17] to show that the DP problem is infinite.
Found a loop by semiunifying a rule from P directly.

The TRS P consists of the following rules:

new_numericEnumFrom(vx3) → new_numericEnumFrom(new_ps(vx3))

The TRS R consists of the following rules:

new_primPlusNat(Zero) → Succ(Zero)
new_ps(Neg(Succ(Succ(vx3000)))) → Neg(Succ(vx3000))
new_primPlusNat0(Succ(vx3000)) → Succ(vx3000)
new_primPlusNat(Succ(vx300)) → Succ(Succ(new_primPlusNat0(vx300)))
new_ps(Pos(vx30)) → Pos(new_primPlusNat(vx30))
new_primPlusNat0(Zero) → Zero


s = new_numericEnumFrom(vx3) evaluates to t =new_numericEnumFrom(new_ps(vx3))

Thus s starts an infinite chain as s semiunifies with t with the following substitutions:




Rewriting sequence

The DP semiunifies directly so there is only one rewrite step from new_numericEnumFrom(vx3) to new_numericEnumFrom(new_ps(vx3)).




Haskell To QDPs